// Copyright © 2022 sealos.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package httpserver

import (
	"net/http"

	restful "github.com/emicklei/go-restful/v3"

	"github.com/labring/sealos/pkg/utils/logger"
)

// GoRestful is a http server using go-restful/v3
func GoRestful(registerFunc func(*restful.WebService), addr string) error {
	container := restful.NewContainer()
	container.Router(restful.CurlyRouter{})

	webService := new(restful.WebService)
	registerFunc(webService)

	container.Add(webService)
	//cors
	Cors(container)

	server := &http.Server{Addr: addr, Handler: container}
	logger.Info("start listening on addr", addr)

	return server.ListenAndServe()
}

func GetAccessToken(request *restful.Request) string {
	authStr := request.HeaderParameter("Authorization")
	if len(authStr) > 7 && authStr[0:7] == "Bearer " {
		return authStr[7:]
	}
	return ""
}
